/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author 
 */
import java.io.*;
import java.net.*;

public class DateiundVerzeichnisVerwaltung {

    public static void main(String argFile[]) {
        File[] f = new File[11];
        try {
            // File-Objekt ueber die unterschiedlichen Konstruktoren erzeugen
            // Im Konstruktor der Klasse File kann ein Pfadname als String-Referenz uebergeben werden,
            // welcher in einen abstrakten Pfadnamen konvertiert wird

            f[0] = new File("C:/EJ_Uebungsbuch1/");
            // Anschließend muss die Methode mkdirs() aufgerufen werden,
            // welche das Unterverzeichnis erzeugt
            f[0].mkdirs(); //Achtung unterschied mkdir!!!!
            f[1] = new File("C:/EJ_Uebungsbuch2/");
            f[1].mkdirs();
            f[2] = new File("C:/EJ_Uebungsbuch3/");
            f[2].mkdirs();
            // Datei oder Verzeichnisname als Argument im Programmaufruf uebergeben
            f[3] = new File(argFile[0]);
            // f[3].mkdirs();

            // Im Konstruktor der Klasse File wird der Pfadname und der Dateiname als String-Referenz uebergeben
            f[4] = new File("C:/EJ_Uebungsbuch1", "TestDatei");
            // Anschließend muss die Methode createNewFile() aufgerufen werden, welche die Datei erzeugt
            f[4].createNewFile();
            // Im Konstruktor der Klasse File wird ein abstrakter Pfadname als File-Referenz uebergeben
            f[5] = new File(f[2], "TestDateiNeu");
            f[5].createNewFile();
            // Die Syntax von URL- und URI-Schemata anzeigen
            URL url = new File("C:/EJ_Uebungsbuch2/").toURI().toURL();
            System.out.println(url.toString());
            f[6] = new File(url.toURI());
            URI uri = new File("C:/EJ_Uebungsbuch3/").toURI();
            System.out.println(uri.toString());
            // Den Konstruktor mit einer URI-Referenz als Parameter aufrufen
            // Das über file:URI-Objekt wird in einen abstrakten Pfadnamen umgesetzt
            f[7] = new File(uri);
            URL url1 = new URL("file:/C:/EJ_Uebungsbuch1/TestDatei");
            URI uri1 = new URI("file:/C:/EJ_Uebungsbuch3/TestDateiNeu");
            f[8] = new File(url1.toURI());
            f[9] = new File(uri1);

            //Pfandname als String-Referenz uebergeben
            f[10] = new File("C:/EJ_Uebungsbuch2/Datei");
            f[10].createNewFile();

            // Informationen ueber die erstellten Dateien und Verzeichnisse ermitteln und anzeigen
            for (int i = 0; i < 11; i++) {
                if (f[i].exists() && f[i].isFile()) {
                    System.out.println(f[i].getName() + "is eine Datei");
                } else if (f[i].exists() && f[i].isDirectory()) {
                    System.out.println(f[i].getName() + "ist ein Dateiverzeichnis");
                } else {
                    // Ist das im Konstruktoraufruf uebergebene Argument fehlerhaft?
                    System.out.println("Fehler: " + f[i]);
                }
            }
            // Dateien umbenennen und löschen
            boolean b = f[10].renameTo(new File("C:/EJ_Uebungsbuch2/DateiNeu"));
            System.out.println(f[10].getName()+" "+b);
            f[10].delete();
            System.out.println(f[10].getName());
        } catch (NullPointerException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Im Programmaufruf einen Verzeichnis"
                    + " oder Dateinamen angeben");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        } catch (URISyntaxException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}
